#ifndef _IMAGE_H_
#define _IMAGE_H_ 

#include "Pixel.h"
#include "Images.h"
#include "Define.h"

/**
 * classe d'Image, permet de lire et d'écrire sur disque
 */
class IMAGES_API Image{
 public:
    Image();
    
    /**
     * On construit une image de X par Y
     * @param sizeX taille X
     * @param sizeY taille Y
     */
    Image(int sizeX,int sizeY);
    
    /**
     * Destructeur de Image
     */
    ~Image();

    /**
     * Retourne le pointeur vers les données
     * *to handle with care*
     * @returns tableau de données
     */

    INLINED Pixelf* getData();
    /**
     * Retourne la taille en X
     */

    INLINED int getSizeX() const { return m_SizeX; }

    /**
     * Retourne la taille en Y
     */
    INLINED int getSizeY() const { return m_SizeY; }

    /**
     * Retourne le pointeur vers la position (x,y)
     */
    INLINED Pixelf* getAt(int x,int y);

    /**
     * Retourne l'Image réduite par un facteur k
     * 
     * (x,y) -> (x/k,x/k), k devrait être un facteur exact de l'image
     */
    Image resampleByFactor(int k);

    /**
     * Sauve l'image au format PNG
     */
    bool save(const char* path);

    /**
     * Charge en memoire une image au format PNG
     */
    bool loadPNG(const char* path);
    
 private:
    Pixelf* m_Data; ///< tableau de pixels
    int m_SizeX;    ///< taille X
    int m_SizeY;    ///< taille Y
};



#endif
